                             - 365 -

                         7. /.

    1.    .

               
   .      
  ,          
 .             
,       ,   ,
    (marking),      ,  
(spacing),   .
        ,    
 .        
0,      .        
( )       . 
     ,   
 ,      1 
  -,      .   
-   ,   -
   ,       ;
  - ,   -
   ,      
 .  . 7-1   .
   ,          
             -
            (    
,   ).      -
 ,     
       ,    -
   .     -
  ,    ,   
,          .
     -
 ,           ,
     .

                             - 366 -

   7.1.1   UART 8250.

       ,   
  ,         
  ,    .
          -
- (universal asynchronous receiver transmitter 
UART). IBM PC  UART 8250  Intel.
      2  , -
     2 .       
 0040:0000  COM1   0040:0002    COM2. ( 
  2-  ,      
 ,    UART.)     PCjr
COM1      3F8H,  COM2 - 2F8H; PCjr    
      3F8H,    COM1 -   3F8H. 
,         3FxH,
          2FxH.
    8250  10     -
,        -
.        , -
,      .     10  -
         3F8H
-  3FEH  ( 2F8H - 2FEH).      ,   
    ,    ,  -
  7    ,    -
     3FBH.   :

3F8H (OUT,  7 = 0  3FBH)     
3F8H (IN,  7 = 0  3FBH)      
3F8H (OUT,  7 = 1  3FBH)      ()
3F9H (IN,  7 = 1  3FBH)       ()
3F9H (OUT,  7 = 0  3FBH)     
3FAH (IN)                        
3FBH (OUT)                       
3FCH (OUT)                       
3FDH (IN)                        
3FEH (IN)                        

           -
 .         
,    [7.1.6],    
-     [7.1.7].   
      ,  
 ,       
 [7.1.2].      -
            
[7.1.5],     ,     
  ,   [7.1.8].
         . -
       -
 ,     ,   -
       .     
 ,        -
 ,      -
 ,      
   .      8250  
    ,       
,     ..    
   , , ,  -
     .

                             - 367 -

   7.1.2   .

        ("")  -
     .        ,  
-,     .   
 ,       .   
      8 ,  7  
   ASCII (       ,
   ASCII 128),       
    4 .

    .

         ,   -
      :

   OPEN "COM1: .........." AS #1

       ,   
   ,      -
    .     
   :

       : 75, 100, 150, 300, 600,
                  1200, 1800, 2400, 4800  9600 .  -
                      300 .
             : O  
                  E -    N -    
                  .      S -   -
                      0  M -    
                    1.   8  ,
                      N;   
                      N.   - E.
                4, 5, 6, 7  8. 
                    7.
-                 1   2,  2 -
                       75  110 ,  1  -
                   .      4
                    5,  2  1 1/2 -.  
                      ,    
                            
                   .

 OPEN "COM1:" AS #1  COM1    
300         ,   7       1
-. OPEN "COM1:1200,O,8,1"   1200 ,
 , 8     1 -.  ,  
   OPEN   LEN = ,  
    ,    GET
 PUT    (  128 ). -
     ,     
   . (  [7.1.5]   
,   ):

   RS       "  " (Request to send).
             ,  OPEN "COM"  RTS.

                             - 368 -

   CS         " "  (Clear  to
          send).        ( 0
            65535),      -
                  -
          ,  , CS500.     1000, 
            RS,    0.

   DS           "    "
          (Data set ready).    ,
             CS.    1000.
   CD        " " (Carrier
          detect).    ,
             CS.    0.
   LF             
          (ASCII 10)       (AS-
          CII 13).       
          .
   PE       ,     
              .

            -
  OPEN "COM"    .  ,    
CTS  DSR   ,    OPEN -
,       .  
  OPEN "COM",    ,  RS
 LF:

   OPEN "COM1:1200,O,7,1,CS2000,DS2000,CD,PE" AS #1 LEN = 256

    .

     0  14H BIOS    -
.   DX      (COM1 =
0,  COM2  = 1).   AL      
,    :

    1-0    . 10 = 7 , 11 = 8 .
          2    -. 0 = 1, 1 = 2.
        4-3   . 00  10 = , 01 = ., 11 = .
        7-5    . 000 = 110 
                               001 = 150 
                               010 = 300 
                               011 = 600 
                               100 = 1200 
                               101 = 2400 
                               110 = 4800 
                               111 = 9600 

              8 ,
 -   .   1200 .

;---   
   MOV  WORDLENGTH,00000011B   ;  8 
   MOV  STOPBITS,00000000B     ;1 -
   MOV  PARITY,00011000B       ; 
   MOV  BAUDRATE,10000000B     ; 1200 

                             - 369 -

;--- COM1
   MOV  AL,0                   ; AL
   OR   AL,WORDLENGTH          ;  
   OR   AL,STOPBITS            ;
   OR   AL,PARITY              ;
   OR   AL,BAUDRATE            ;
   MOV  AH,0                   ;  
   MOV  DX,0                   ; COM1
   INT  14H                    ; 

    .

     ,        , 
  4   8250    
  .       , -
      .

  .

        ,    
    (1190000  ),   
 .  ,    1200  
      96,  1190000/96 -
    1200.    ,     
.   300       
 .      3F9H ( 2F9H),  -
  3F8H (2F8H).          7  
      1   ;  -
            
  (. [7.1.0]).    , 
   :

                 3F9H            3F8H

        110                     04H             17H
        300                     01H             80H
        600                     00H             C0H
       1200                     00H             60H
       1800                     00H             40H
       2400                     00H             30H
       3600                     00H             20H
       4800                     00H             18H
       9600                     00H             0CH

          ,  
  ,  ,     7
    .      
  ,    7- ,   
    .    
       ,    -
  7   1     
  . ,  PCjr   -
,        .

   .

        ,    
 3FBH ( 2FBH), :

                             - 370 -

    1-0    . 00 = 5 , 01 = 6 
                             10 = 7 , 11 = 8 
          2    -. 0 = 1, 1 = 1.5,  
                                ,  2.
          3   . 1 =   , 0 = .
          4    . 0 = , 1 = 
          5    .    
               0  1. 0 = 
                  1 =  1,   3 = 1 &  4 = 0
               1 =  0,   3 = 1 &  4 = 1
               1 =  ,   3 = 0
          6    .    
                  .
              0 = , 1 = 
          7       

  5-7   0.   , -
  .

  .

          ,     
        ,   
,     .       
 0.     .

           . ,
        ,  
    ,    -
 .  [7.1.5]    
 .
          BIOS   
COM1,       
 1200  ,    ,      
-.

;---   COM1
   MOV  AX,40H          ;ES     BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[0]       ;   COM1
;---      1200 
   ADD  DX,3            ;    
   MOV  AL,10000000B    ;  7
   OUT  DX,AL           ; 
   DEC  DX              ;    
   DEC  DX              ; 
   MOV  AL,0            ;   1200 
   OUT  DX,AL           ;    1200 
   DEC  DX              ;    
   MOV  AL,60H          ;    1200 
   OUT  DX,AL           ;  
;---   
   MOV  AL,0            ; AL
   OR   AL,10B          ;  7 
   OR   AL,000B         ;1 -
   OR   AL,1000B        ;  
   OR   AL,10000B       ; 
   ADD  DX,3            ;    
   OUT  DX,AL           ;  

                             - 371 -

;---   
   DEC  DX              ;   
   DEC  DX              ;
   MOV  AL,0            ; 
   OUT  DX,AL           ; 

                             - 372 -

   7.1.3    .

       ,       ,
     .    
         .
         
COM1,     ,   
  COM1.
       BIOS        2-
,          
 (MS DOS      ).   
         ,  
      . 
  COM1    0040:0000,   COM2 -  
0040:0002.       
  .         -
  .

    .

      OPEN "COM"     OPEN
C$+"1200,N,8" AS  #2,    C$        "COM1:",  
"COM2:".       PEEK   POKE
   :

100 DEF SEG = &H40          '    BIOS
110 X = PEEK(0): Y = PEEK(1)  '  2 
120 POKE 0,PEEK(2): POKE 1,PEEK(3)  ' 2-  
130 POKE 2,X: POKE 3,Y      '  

    .

              
  14H  BIOS,   COM      DX,
  0  1  (  COM1    COM2).  , 
 DX  ,    -
,      0  1. ,
   3  4  21H 
  COM1.       :

;---    COM1  COM2
   MOV  AX,40H        ;ES     BIOS
   MOV  ES,AX         ;
   MOV  DX,ES:[0]     ; 1-    DX
   MOV  AX,ES:[2]     ; 2-    AX
   MOV  ES:[0],AX     ; 
   MOV  ES:[2],DX     ;

                             - 373 -

   7.1.4    .

       UART 8250  
.         5 ,   
  .       -
  .     -
,      ,   -
    .      -
        ,     
          -
 .     :

    0   1 =   
       1   1 =     (
                   )
       2   1 =   (, -   )
       3   1 =   (  )
       4   1 =   (   ,
               ,    
                )
       5   1 =     (  
                  )
       6   1 =     (  -
                     
                  )
       7   1 =  (    )

    .

           -
  ,     5   -
 INP          .    
      ,  
  ,     
 .        -
:

100 DEF SEG = &H40         '    BIOS
110 ADDR = PEEK(4)+PEEK(5)*256   '  COM2
120 X = INP(ADDR+5)        '   
130 IF X AND 16 THEN 500   '  -,   4 = 1
 .
 .
500 '''   

    .

    3  14H BIOS    AH  
 (AL     [7.1.5]).    DX
      ,   -
  ,  COM1 = 0,  COM2 = 1.     
,    :

   MOV  AH,3          ; 
   MOV  DX,1          ; COM2
   INT  14H           ;  
   TEST AH,10000B     ; ?
   JNZ  BREAK_DETECT  ; ,    

                             - 374 -

    .

          . 
   BIOS     
,    5,      
  .

   MOV  AX,40H          ;ES     BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[2]       ;   COM2
   ADD  DX,5            ; 5   
   IN   AL,DX           ;  
   TEST AL,10000B       ; 5 ?
   JNZ  BREAK_DETECT    ; ,    

                             - 375 -

   7.1.5    .

     6 ,       
(         -
 RS232).   ,   :

   :

Data Terminal Ready (DTR)         ,  
                 .

Request To Send (RTS)             ,  
                    .

   :

Data Set Ready (DSR)              ,  
                   .

Clear To Send (CTS)               ,  
                  .

Data Carrier Detect (DCD)         ,  
             .

Ring Indicator (RI)               ,  -
                   ,   -
                                    .

        DTR,   -
     .   ,  
     DSR.   -
 ,          
   RTS.     CTS, 
 .
     ,     ,
      UART 8250. 
      4 ,    -
  .    :

  :

    7-5     ( 0)
          4     1 =  UART   
          3          #2
          2          #1
          1     1 = "  " 
          0     1 = " " 

      0    1      , 
   0.   2  0,   , 
       -
.   3    ,   -
 [7.1.8]. ,  4    -
       -
.      UART   ,  
UART    .      -
      .

                             - 376 -

      -
 14H BIOS.
    ,      ,
   .     
   6 ,      -
 .    :

  :

    7      1 = DCD
       6      1 = RI
       5      1 = DSR
       4      1 = CTS
       3      1 =   DCD
       2      1 =   RI
       1      1 =   DSR
       0      1 =   CTS

           -
 .  ,   4      
 .      1  ,  
         
 ,     .   4  
    .   
      .    -
   3  14H BIOS,  -
      AL (   AH    -
     ).      DX  
   (0  1).
            ,  
  ,        -
.        
,     .    
  ,       .  
       , -
       .   
    (   Esc -  ASCII
27)   .     -
      ,     
         -
.        .     
 ,    PCjr:

                       

    A                       
    Bn                    n*100 
    Cn            n      n   
    Dn...n                  n...n
    Fn                    
    H                      
    I             
    LR                
    M                        
    Nn                       n
    O           originate        originate
    P            pick-up         
    Q                     

                             - 377 -

    R                     
    Sn                  
    Tn...n          
                                n...n 
    V                        
    W                     . 
    X                   
    Z                       

              
,     UART   .    
,  ,     .  
        -
          .  
PCjr       PCjr.   
        .

    .

       ,    
   ,      
 ,    .   :

100 OUT BASEADDRESS+4,1        '  DTR
110 '''       -
120 '''  -       
 .
 .
200 X = INP(BASEADDRESS+2)     '   
210 IF X AND 2 <> 2 THEN 200   '     1
220 OUT BASEADDRESS+4,3        '  RTS
230 X = INP(BASEADDRESS+2)     '   
240 IF X AND 1 <> 1 THEN 230   '     0
250 '''  

    .

          :

;---  DTR
   MOV  DX,BASE_ADDRESS    ;   
   ADD  DX,4               ;    
   MOV  AL,1               ;  1
   OUT  DX,AL              ;  
;---     
    .
   (     )
    .
;---     DSR
   INC  DX                 ;    
   INC  DX                 ;
TRY_AGAIN:  IN   AL,DX     ; 
   TEST AL,10B             ;  
   JZ   TRY_AGAIN          ;      1

                             - 378 -

;---  RTS
   DEC  DX                 ;   
   DEC  DX                 ;
   MOV  AL,3               ;  RTS
   OUT  DX,AL              ;  
;---  CTS
   INC  DX                 ;   
   INC  DX                 ;
ONCE_MORE:  IN   AL,DX     ;  
   TEST AL,1               ;  CTS
   JZ   ONCE_MORE          ;     
;---   

                             - 379 -

   7.1.6  .

         ,     
         ,   
  .          
 ,         ,
   .        
    XON/XOFF.     
  ASCII  17(XON)  19(XOFF),      
 ,         
    .      ,
      
  (   ,      
,           
).     ,  ,     
  ,    ,  -
       (  4)  
  [7.1.4].  .  7-2 ( [7.1.7])   -
      ,  -
.
     ,     
     .     
     ,   [7.1.7]
     ,  . ,  
       
,            
 .

    .

      ,      -
     PRINT#, PRINT# USING 
WRITE#.       , -
  ,          .
   PRINT#.     
    .  , 
COM1  ,    [7.1.2].    
     .

 .
 .
500 C$ = INKEY$: IF C$ <> "" THEN PRINT #1,C$
510 X = INP(BASEADDRESS + 5)    '   
520 IF X AND 32 = 32 THEN 1000  '  
530 IF EOF(1) THEN 500       '  ,   
 .
 (    )
 .
1000 '''   

    .

    1  14H BIOS  ,   
AL   .   DX    (0
 1).    AH   ,    7 =
1,   .       -
 :

                             - 380 -

 4     ( ""   )
    5      
    6      

   MS DOS        
,   DL.    4  21H, 
            BIOS;  
        
       ( 
COM1).
         40H 
21H.            
    .  COM1  -
  #3.     BX,   -
    CX.   DS:DX     
   .

   MOV  AH,40H         ; 
   MOV  BX,3           ;    COM1
   MOV  CX,50          ; 50 
   LEA  DX,DATA_BUFFER ;DS:DX    
   INT  21H            ; 
   JC   COM_ERROR      ;   

,       
  .   ,   
,   AX    5      
  6     .

    .

            ,
            
  ,   .  -
     ,       -
  .    5     
         . -
        ,   5    
 1.         
      ,   .     
  5  0          1,
            
.      ,   .
             .
,       (  ,
       -
     ).   -
,         , 
    [7.1.2]  [7.1.5].        
   .    [7.1.7]     
 .

                             - 381 -

;---       
KEEP_TRYING:  MOV  DX,BASE_ADDRESS   ; 
   ADD  DX,5              ;    
   IN   AL,DX             ;  
   TEST AL,00011110B      ;  
   JNZ  ERROR_ROUTINE     ; ,    
   TEST AL,00000001B      ;   
   JNZ  RECEIVE           ; ,    
   TEST AL,00100000B      ;   
   JZ   KEEP_TRYING       ; ,   
;---    
   MOV  AH,1              ;   
   INT  16H               ;  BIOS
   JZ   KEEP_TRYING       ;,    
   MOV  AH,0              ;    
   INT  16H               ;    AL
   SUB  DX,5              ;   
   OUT  DX,AL             ; 
   JMP  SHORT KEEP_TRYING ;   

                             - 382 -

   7.1.7  .

          
   [7.1.2]   
    [7.1.5].      
   ,       -
     XOFF (ASCII 19),     
,             
.   XON (ASCII 17)   , 
  .  ,   PCjr   
     ;      
  XON  XOFF.
             ,
       .
        , 
 [7.1.9].   ,     
   .     -
        (ASCII
10),      (  )  
       ;    
      ,  
   .   .  7-2   
,    ,   [7.1.6].

    .

     ,   
,    .    ,  
     ,    
   (..   )    
        . -
           
 .        -
     /C:.  BASICA /C:1024 
   1K         
1200   (    4096 ).   
        256   
   ,        
  .       -
     300   .
              INPUT$  (
  INPUT#  LINE  INPUT#,  INPUT$  ).
    INPUT$(,). ,
INPUT$(10,#1)  10     , -
   #1.       256  ,
            .  LOC
            -
.      INPUT$(LOC(1),#1)    S$ 
        . -
,  LOC(1) = 0,           
    .  ,  EOF(1)   -
       ,     
  -1      0,        
.
         S$   
      .   INSTR  
   .   ,    

                             - 383 -

  ,       ,   
 , ,   (  )    .  
      XOFF  (ASCII  19)         
INSTR(1,S$,CHR$(19)).      -
        ,     ,
  ,    .
          -
    ,      
 .      ,   -
    ,        
 .          
         .
 ,     ,  -
     XOFF,   .  ,
        ,  
   .  ,     
  XON  XOFF. ,   -
 ,    XON/XOFF  -
       ,   
         -
    XOFF.

 .
 .
500 '''    (. [7.1.6])
 .
 .
600 IF LOC(1)>100 THEN XOFF = 1: PRINT #1,CHR$(19)
610 C$ = INPUT$(LOC(1),#1)   '  
620 '''    
630 IF INSTR(1,C$,CHR$(19))>0 THEN 800  ' XOFF
640 IF INSTR(1,C$,CHR$(17))>0 THEN 900  ' XON
 .
 (    
 .
700 PRINT C$                 '   
710 IF LOC(1) > 0 THEN 600   '  ,   
720 IF XOFF = 1 THEN XOFF = 0: PRINT #1,CHR$(17)
 .
 .
800 '  XOFF
 .
900 '  XON

     LOF    ,  
    ,    -
.  ,  COM1   #1,  LOF(1)  -
  .       ,  
  .  ,  ,   LOC 
         
    .  ,    COM1    #3,  
      256 ,    ,   LOC(3)  
  256,   .

                             - 384 -

    .

    2  14H BIOS    -
 ,    AL      
 .       (0-1)  DX. 
 AX  ,    .   AH   0,
      ,      
 5 .   :

  1     (    ,  
           )
     2     (, -   )
     3     (  - )
     4     (    0)
     5     (   DSR)

   MS DOS      
 ,    3    21H.   
   COM1     AL.  ,      
  ,      
BIOS   ,    [7.1.2].    
      2400 ,   -
,   -  8   .      
        BIOS   
  .

    .

          -
 [7.1.8]          
  ,     5    
   .    0  
   ,           -
  .    0   1,  
     ,       -
   .     ,
 0    0   ,    -
  .
        ,   -
         -
.       [3.1.1].    
,         
1200 ,      BIOS [4.5.1]   -
     .       
     ,  -
  [7.1.8].
            
,    .      
    .    2    
    [7.1.2]   [7.1.5]   -
  /   .

KEEP_TRYING:   MOV  DX,BASE_ADDRESS   ; 
   ADD  DX,5           ;    
   IN   AL,DX          ;  
   TEST AL,00011110B   ;  
   JNZ  ERROR_ROUTINE  ; ,    

                             - 385 -

   TEST AL,00000001B   ;   
   JNZ  RECEIVE        ;   
   TEST AL,00100000B   ;   
   JZ   KEEP_TRYING    ; ,    
    .
   (    - . [7.1.6])
    .
;---      
RECEIVE:   MOV  DX,BASE_ADDRESS        ; 
   IN   AL,DX          ;  
   CMP  AL,19          ;  XOFF
   JE   XOFF_ROUTINE   ;
    .
   ( ..)
    .
   MOV  DL,AL          ;     
   MOV  AH,2           ;  
   INT  21H            ; 
   JMP  SHORT KEEP_TRYING   ;   

                             - 386 -

   7.1.8  /       
.

         ,
     /.     
 ,    ,  
         
.       
 /   ,        . ,
  ,    -
     ,     -
     ,      -
,         ,  
      .     -
      [1.2.3],   
.
   IBM  PC      
,  3 (COM1)  4 (COM2). ,   PCjr, -
     3,  COM1 -  4.   UART 8250
 4      ,  -
   :

   00         
   01        
   10      
   11      ,    

      2-1    -
,     2 ,     -
  .  0   -
    ,       -
    0.
         ,   -
    ,      1 
 .    :

 0     1 =    
    1     1 =      
    2     1 =     
    3     1 =      
  7-4      ,  0

     ,   
,      8259 
  3   COM1    4  COM2.    
      ,    
  .     -
,         [1.2.2].   , 
         
     MOV AL,20H/OUT 20H,AL.  
. 7-3   .
           -
.         ,   
        -
,      .  
      ,    0  -

                             - 387 -

     ,     -
.           
 ,          ,  
 .      -
        .   
  ""     , -
     :

                              ""

 11                 
 10                   
 01                   
                                 
 00           

    .

        ,    
:

;---   
   PUSH DS                  ; DS
   MOV  DX,OFFSET IO_INT    ;DS:DX   
   MOV  AX,SEG IO_INT       ;
   MOV  DS,AX               ;
   MOV  AL,0BH              ;   COM1
   MOV  AH,25H              ;  
   INT  21H                 ;  
;---    (COM1)
   MOV  AX,40H              ;DS    BIOS
   MOV  DS,AX               ;
   MOV  DX,DS:[0]           ;   COM1
   INC  DX                  ;   
   MOV  AL,3                ;   
   OUT  DX,AL               ;  
   POP  DS                  ; 

;---   -    
IO_INT      PROC FAR
NEXT_INT:   MOV  DX,BASEADDRESS     ; 
   INC  DX                  ;   
   INC  DX                  ;
   IN   AL,DX               ;  
   TEST AL,10B              ;  ?
   JNZ  TRANSMIT            ; ,   

RECEIVE:                    ;  
   .
   .
   JMP SHORT ANOTHER        ;    

TRANSMIT:                   ;   
   .
   .

                             - 388 -

;--- ,     
ANOTHER:   MOV  DX,BASEADDRESS       ; 
   INC  DX                  ;   
   INC  DX                  ;
   IN   AL,DX               ;  
   TEST AL,1                ;  1
   JNZ  NEXT_INT            ;  ,   
   MOV  AL,20H              ;   
   OUT  20H,AL              ;
   IRET
IO_INT      ENDP

                             - 389 -

   7.1.9   ,   .

      32      ASCII,  -
  ,       
.      ASCII  127 - DEL (), 
    ,     
     Ctrl + .  -
  ,     , .    -
       -
,   -   .